package com.mall.system.feign;

import com.mall.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 消息服务Feign客户端
 */
@FeignClient(contextId = "messageServiceFeignClient", name = "mall-system", path = "/system/message", fallback = MessageServiceFeignClientFallback.class)
public interface MessageServiceFeignClient {
    
    /**
     * 记录短信发送日志
     * 
     * @param mobile 手机号码
     * @param content 短信内容
     * @param status 发送状态 0-失败 1-成功 2-待发送
     * @param errorMessage 错误信息
     * @return 日志ID
     */
    @PostMapping("/sms/log")
    Result<Long> saveSmsLog(@RequestParam("mobile") String mobile, 
                            @RequestParam("content") String content, 
                            @RequestParam("status") Integer status, 
                            @RequestParam("errorMessage") String errorMessage);
    
    /**
     * 更新短信发送状态
     * 
     * @param logId 日志ID
     * @param status 发送状态 0-失败 1-成功 2-待发送
     * @param errorMessage 错误信息
     * @return 是否成功
     */
    @PostMapping("/sms/status")
    Result<Boolean> updateSmsLogStatus(@RequestParam("logId") Long logId, 
                                       @RequestParam("status") Integer status, 
                                       @RequestParam("errorMessage") String errorMessage);
    
    /**
     * 记录邮件发送日志
     * 
     * @param toEmail 收件人邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param status 发送状态 0-失败 1-成功 2-待发送
     * @param errorMessage 错误信息
     * @return 日志ID
     */
    @PostMapping("/email/log")
    Result<Long> saveEmailLog(@RequestParam("toEmail") String toEmail, 
                              @RequestParam("subject") String subject, 
                              @RequestParam("content") String content, 
                              @RequestParam("status") Integer status, 
                              @RequestParam("errorMessage") String errorMessage);
    
    /**
     * 更新邮件发送状态
     * 
     * @param logId 日志ID
     * @param status 发送状态 0-失败 1-成功 2-待发送
     * @param errorMessage 错误信息
     * @return 是否成功
     */
    @PostMapping("/email/status")
    Result<Boolean> updateEmailLogStatus(@RequestParam("logId") Long logId, 
                                         @RequestParam("status") Integer status, 
                                         @RequestParam("errorMessage") String errorMessage);
}